/*
 Language: Javascript
 */

hljs.LANGUAGES.javascript = {
    defaultMode: {
        lexems: [hljs.UNDERSCORE_IDENT_RE],
        contains: ['string', 'comment', 'number', 'regexp_container', 'function'],
        keywords: {
            'keyword': {
                'in': 1,
                'if': 1,
                'for': 1,
                'while': 1,
                'finally': 1,
                'var': 1,
                'new': 1,
                'function': 1,
                'do': 1,
                'return': 1,
                'void': 1,
                'else': 1,
                'break': 1,
                'catch': 1,
                'instanceof': 1,
                'with': 1,
                'throw': 1,
                'case': 1,
                'default': 1,
                'try': 1,
                'this': 1,
                'switch': 1,
                'continue': 1,
                'typeof': 1,
                'delete': 1
            },
            'literal': {'true': 1, 'false': 1, 'null': 1}
        }
    },
    modes: [
        hljs.C_LINE_COMMENT_MODE,
        hljs.C_BLOCK_COMMENT_MODE,
        hljs.C_NUMBER_MODE,
        hljs.APOS_STRING_MODE,
        hljs.QUOTE_STRING_MODE,
        hljs.BACKSLASH_ESCAPE,
        {
            className: 'regexp_container',
            begin: '(' + hljs.RE_STARTERS_RE + '|case|return|throw)\\s*', end: '^', noMarkup: true,
            lexems: [hljs.IDENT_RE],
            keywords: {'return': 1, 'throw': 1, 'case': 1},
            contains: ['comment', 'regexp'],
            relevance: 0
        },
        {
            className: 'regexp',
            begin: '/.*?[^\\\\/]/[gim]*', end: '^'
        },
        {
            className: 'function',
            begin: '\\bfunction\\b', end: '{',
            lexems: [hljs.UNDERSCORE_IDENT_RE],
            keywords: {'function': 1},
            contains: ['title', 'params']
        },
        {
            className: 'title',
            begin: '[A-Za-z$_][0-9A-Za-z$_]*', end: '^'
        },
        {
            className: 'params',
            begin: '\\(', end: '\\)',
            contains: ['string', 'comment']
        }
    ]
};
